# Test default GOPROXY and GOSUMDB
env GOPROXY=
env GOSUMDB=
go env GOPROXY
stdout '^https://proxy.golang.org,direct$'
go env GOSUMDB
stdout '^sum.golang.org$'
env GOPROXY=https://proxy.golang.org
go env GOSUMDB
stdout '^sum.golang.org$'

# Download direct from github.

[!net:proxy.golang.org] skip
[!net:sum.golang.org] skip
[!git] skip
env GOSUMDB=sum.golang.org
env GOPROXY=direct

go get rsc.io/quote@v1.5.2
cp go.sum saved.sum


# Download from proxy.golang.org with go.sum entry already.
# Use 'go list' instead of 'go get' since the latter may download extra go.mod
# files not listed in go.sum.

go clean -modcache
env GOSUMDB=
env GOPROXY=

go list -x -m all  # Download go.mod files.
! stderr github
stderr proxy.golang.org/rsc.io/quote
! stderr sum.golang.org/tile
! stderr sum.golang.org/lookup/rsc.io/quote

go list -x -deps rsc.io/quote  # Download module source.
! stderr github
stderr proxy.golang.org/rsc.io/quote
! stderr sum.golang.org/tile
! stderr sum.golang.org/lookup/rsc.io/quote

cmp go.sum saved.sum


# Download again.
# Should use the checksum database to validate new go.sum lines,
# but not need to fetch any new data from the proxy.

rm go.sum

go list -mod=mod -x -m all  # Add checksums for go.mod files.
stderr sum.golang.org/tile
! stderr github
! stderr proxy.golang.org/rsc.io/quote
stderr sum.golang.org/lookup/rsc.io/quote

go list -mod=mod -x rsc.io/quote  # Add checksums for module source.
! stderr .  # Adds checksums, but for entities already in the module cache.

cmp go.sum saved.sum


# test fallback to direct

env TESTGOPROXY404=1
go clean -modcache
rm go.sum

go list -mod=mod -x -m all  # Download go.mod files
stderr 'proxy.golang.org.*404 testing'
stderr github.com/rsc

go list -mod=mod -x rsc.io/quote  # Download module source.
stderr 'proxy.golang.org.*404 testing'
stderr github.com/rsc

cmp go.sum saved.sum


-- go.mod --
module m
